package org.Iteracion2.presentacion;

import java.awt.EventQueue;

import javax.swing.JFrame;
import javax.swing.JPanel;

import java.awt.BorderLayout;

import javax.swing.JButton;

import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.util.List;

import javax.swing.JList;
import javax.swing.border.TitledBorder;
import javax.swing.text.MaskFormatter;
import javax.swing.DefaultListModel;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JTextPane;
import javax.swing.JTextField;
import javax.swing.JFormattedTextField;
import javax.swing.ListSelectionModel;

import org.Iteracion3.dominio.Viaje;
import org.Iteracion3.dominio.Billete;
import org.Iteracion3.presentacion.Comprar_Billete;

import com.sun.org.apache.xerces.internal.impl.xpath.regex.ParseException;

import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;

public class Horario_Precio {

	public JFrame VentanaHorarioPrecio;
	private JPanel panel;
	private JButton button;
	private JList ListViaje;
	private JLabel lblTextInfo;
	private JLabel lblIdViaje;
	private JTextField txtIdViaje;
	private JLabel lblPrecio;
	private JTextField txtPrecio;
	private JLabel lblFecha;
	private JLabel lblSalida;
	private JLabel lblLlegada;
	private JFormattedTextField ftxtFecha;
	private JFormattedTextField ftxtSalida;
	private JFormattedTextField ftxtLlegada;
	private JButton btnComprar;

	/**
	 * Launch the application.
	 */
	public static void main(String[] args) {
		EventQueue.invokeLater(new Runnable() {
			public void run() {
				try {
					Horario_Precio window = new Horario_Precio();
					window.VentanaHorarioPrecio.setVisible(true);
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
		});
	}

	/**
	 * Create the application.
	 * 
	 * @throws Exception
	 */
	public Horario_Precio() throws Exception {
		initialize();
	}

	/**
	 * Initialize the contents of the frame.
	 * 
	 * @throws Exception
	 */
	private void initialize() throws Exception {
		VentanaHorarioPrecio = new JFrame();
		VentanaHorarioPrecio.addWindowListener(new FrameWindowListener());
		VentanaHorarioPrecio.setTitle("Consultar horarios y precio");
		VentanaHorarioPrecio.setVisible(true);
		VentanaHorarioPrecio.setBounds(100, 100, 450, 276);
		VentanaHorarioPrecio.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		{
			panel = new JPanel();
			VentanaHorarioPrecio.getContentPane().add(panel,
					BorderLayout.CENTER);
			panel.setLayout(null);
			{
				button = new JButton("Atr\u00E1s");
				button.addActionListener(new ActionListener() {
					public void actionPerformed(ActionEvent arg0) {
						//Menu.VentanaMenu.setVisible(true);
						VentanaHorarioPrecio.setVisible(false);
					}
				});
				button.setBounds(329, 185, 83, 25);
				panel.add(button);
			}
			{
				ListViaje = new JList();
				ListViaje.addMouseListener(new ListViajeMouseListener());
				ListViaje.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
				ListViaje.setBorder(new TitledBorder(null, "Lista de viajes",
						TitledBorder.LEADING, TitledBorder.TOP, null, null));
				ListViaje.setBounds(22, 42, 172, 170);
				panel.add(ListViaje);
				DefaultListModel modelo = new DefaultListModel();
				Viaje v = new Viaje(0, null, null, null, null, null, null);
				List<Viaje> lisVi = v.leerTodos();
				for (int i = 1; i < lisVi.size(); i++) {
					modelo.addElement(lisVi.get(i).getId());
				}

				ListViaje.setModel(modelo);
			}
			{
				lblTextInfo = new JLabel(
						"Seleccione el identificador del viaje para consultar su horario y precio.");
				lblTextInfo.setBounds(12, 13, 408, 16);
				panel.add(lblTextInfo);
			}
			{
				lblIdViaje = new JLabel("Id del viaje:");
				lblIdViaje.setBounds(221, 43, 77, 16);
				panel.add(lblIdViaje);
			}
			{
				txtIdViaje = new JTextField();
				txtIdViaje.setEditable(false);
				txtIdViaje.setEnabled(false);
				txtIdViaje.setBounds(221, 59, 68, 22);
				panel.add(txtIdViaje);
				txtIdViaje.setColumns(10);
			}
			{
				lblPrecio = new JLabel("Precio:");
				lblPrecio.setBounds(299, 42, 80, 16);
				panel.add(lblPrecio);
			}
			{
				txtPrecio = new JTextField();
				txtPrecio.setEditable(false);
				txtPrecio.setEnabled(false);
				txtPrecio.setBounds(299, 59, 110, 22);
				panel.add(txtPrecio);
				txtPrecio.setColumns(10);
			}
			{
				lblFecha = new JLabel("Fecha:");
				lblFecha.setBounds(221, 94, 56, 16);
				panel.add(lblFecha);
			}
			{
				lblSalida = new JLabel("Salida:");
				lblSalida.setBounds(221, 122, 56, 16);
				panel.add(lblSalida);
			}
			{
				lblLlegada = new JLabel("Llegada:");
				lblLlegada.setBounds(317, 122, 56, 16);
				panel.add(lblLlegada);
			}
			{

				MaskFormatter formatoFecha;
				try {
					formatoFecha = new MaskFormatter("##/##/####");
					formatoFecha.setPlaceholderCharacter('-');
					ftxtFecha = new JFormattedTextField(formatoFecha);
					ftxtFecha.setEditable(false);
					ftxtFecha.setEnabled(false);
				} catch (ParseException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
				ftxtFecha.setBounds(273, 91, 136, 22);
				panel.add(ftxtFecha);
			}
			{
				MaskFormatter formatoSalida;
				try {
					formatoSalida = new MaskFormatter("##:##");
					formatoSalida.setPlaceholderCharacter('-');
					ftxtSalida = new JFormattedTextField(formatoSalida);
					ftxtSalida.setEditable(false);
					ftxtSalida.setEnabled(false);
				} catch (ParseException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
				ftxtSalida.setBounds(263, 119, 42, 22);
				panel.add(ftxtSalida);
			}
			{
				MaskFormatter formatoLlegada;
				try {
					formatoLlegada = new MaskFormatter("##:##");
					formatoLlegada.setPlaceholderCharacter('-');
					ftxtLlegada = new JFormattedTextField(formatoLlegada);
					ftxtLlegada.setEditable(false);
					ftxtLlegada.setEnabled(false);
				} catch (ParseException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
				;
				ftxtLlegada.setBounds(367, 119, 42, 22);
				panel.add(ftxtLlegada);
			}
			{
				btnComprar = new JButton("Comprar");
				btnComprar.addActionListener(new ActionListener() {
					public void actionPerformed(ActionEvent arg0) {
						Comprar_Billete cb = new Comprar_Billete();
						cb.VentanaComprarBillete.setVisible(true);
						VentanaHorarioPrecio.setVisible(false);
						try {
							cb.cargarCampos(Integer.parseInt(ListViaje.getSelectedValue().toString()));
						} catch (NumberFormatException e) {
							// TODO Auto-generated catch block
							e.printStackTrace();
						} catch (Exception e) {
							// TODO Auto-generated catch block
							e.printStackTrace();
						}
					}
				});
				btnComprar.setEnabled(false);
				btnComprar.setBounds(206, 185, 97, 25);
				panel.add(btnComprar);
			}
		}
	}

	private class ListViajeMouseListener extends MouseAdapter {
		public void mouseClicked(MouseEvent arg0) {
			ftxtSalida.enable(true);
			ftxtLlegada.enable(true);
			ftxtFecha.enable(true);
			txtIdViaje.enable(true);
			txtPrecio.enable(true);
			borrarCampos();
			try {
				Viaje v = new Viaje(Integer.parseInt(ListViaje.getSelectedValue().toString()), null,
						null, null, null, null, null);
				v.leerViaje();
				Billete b=new Billete(-1, 0, v, null, null);
				b.leerBillete();
				ftxtSalida.setText(v.getHora_salida());
				ftxtLlegada.setText(v.getHora_llegada());
				ftxtFecha.setText(v.getFecha());
				txtIdViaje.setText(Integer.toString(v.getId()));
				txtPrecio.setText(Double.toString(b.getPrecio()));
			} catch (Exception e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			btnComprar.setEnabled(true);

		}
	}
	private void borrarCampos(){
		ftxtSalida.setText("");
		ftxtLlegada.setText("");
		ftxtFecha.setText("");
		txtIdViaje.setText("");
		txtPrecio.setText("");
	}
	private class FrameWindowListener extends WindowAdapter {
		@Override
		public void windowClosing(WindowEvent arg0) {
			VentanaHorarioPrecio.setDefaultCloseOperation(javax.swing.WindowConstants.DO_NOTHING_ON_CLOSE);
			if(JOptionPane.showConfirmDialog(VentanaHorarioPrecio, "¿Esta seguro que desea salir de la aplicación? \n   Los cambios no guardados se perderán","ATENCION!",JOptionPane.OK_CANCEL_OPTION) == JOptionPane.YES_OPTION){
				System.exit(0);
			}
		}
	}
}
